#pragma once
#include "Runtime/CGI/CGIPrefix.h"

namespace Alice
{
    class VulkanDevice;
    class VulkanCommandListContext;
    class FVulkanCGIGraphicPipelineState;
    class VulkanPendingComputeState
    {
    public:
        VulkanDevice*mDevice;
    };
    class VulkanPendingGraphicsState
    {
    public:
        struct VertexStream{
            VkBuffer mBuffer;
            uint32 mDataOffset;
            VertexStream():mBuffer(VK_NULL_HANDLE),mDataOffset(0){}
        };
        VulkanDevice*   mDevice;
	    EPrimitiveType  mPrimitiveType = PT_Num;
        uint32          mStencilRef;
        bool            mbScissorEnable;
        bool            mbNeedToClear;
        FVulkanCGIGraphicPipelineState*mVulkanCGIGraphicPipelineState;
        VertexStream mVertexStreams[MaxVertexElementCount];
        VulkanCommandListContext*mVulkanCommandListContext;
        VulkanPendingGraphicsState(VulkanDevice*inDevice,VulkanCommandListContext*inVulkanCommandListContext);
        bool SetGraphicsPipeline(FVulkanCGIGraphicPipelineState* inVulkanCGIGraphicPipelineState, bool bForceReset);
        void Bind(VkCommandBuffer inCommandBuffer) const;
    };
}
